package com.candy.dao;
import com.candy.pojo.users;
import com.candy.pojo.supplier;
import java.sql.*;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * @author donglin
 * @Title:
 * @类名: DBHelper
 * @date 2020/8/12
 */
public class DBHelper {
    /*/**
     * 方法描述:获取数据库连接对象Connection
     * @return：Connection
     *
     */

    public static Connection getConn() {
        Connection conn=null;
        String strUrl="jdbc:mysql://localhost:3306/invoicing_system";
        String strDBDriverType="com.mysql.jdbc.Driver";//数据库驱动类名
        String strUserName="root";//用户名
        String strPwd="root";//密码
        try {
            //加载数据库驱动类
            Class.forName("com.mysql.jdbc.Driver");//固定写法（反射）
//        （2）获取数据库连接对象Connection
            conn= DriverManager.getConnection(strUrl,strUserName,strPwd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
    /*/**
     * 方法描述：进行查询操作
     * @param strSql 查询的sql语句
     * @return 查询结果集ResultSet
     *
     */
    public static ResultSet query(String strSql) {
        ResultSet rs=null;
        try {
            Connection conn= getConn();
            //        （3）获取数据库操作对象Statement（执行增删改查）
            Statement st= conn.createStatement();

            //接收返回结果
            rs=st.executeQuery(strSql);
//
        } catch (Exception e) {
            e.printStackTrace();
        }
        return rs;
    }



    /*/**
     * 方法描述：进行查询操作
     * @param strSql 查询的sql语句
     * @return 查询结果集ResultSet的数据转储List<Map<String,Object>>
     *
     */
    public static List<Map<String,Object>> query4ListMap(String strSql) {
        //用于存储查询结果数据
        List<Map<String, Object>> lst = new ArrayList<>();
        try (Connection conn = getConn();
             //        （3）获取数据库操作对象Statement（执行增删改查）
             Statement st = conn.createStatement();
             //接收返回结果
             ResultSet rs = st.executeQuery(strSql);) {
            //解析结果集对象ResultSet，将ResultSet中的数据转储到List+Map的数据结构中；
            //创建一个map对象
            Map<String, Object> mapEachRow = null;
            //获取表的结构信息
            ResultSetMetaData rsmd = rs.getMetaData();
            //获取信息的列数
            int columnCount = rsmd.getColumnCount();
            while (rs.next()) {
                //每一行的数据以键值对的形式存储在map中，每一次循环都需要创建一个新的map
                //键值对指的是以数据库的字段名为建（key），以改行的数据中的该列的值 为键值对的值；
                mapEachRow = new LinkedHashMap<>();
                //遍历当前行的列，下标从1开始
                for (int i = 1; i <= columnCount; i++) {
                    //获取列名
                    String columnName = rsmd.getColumnLabel(i);
                    //通过列名获取对应的该行该列的值
                    Object columnValue = rs.getObject(columnName);
                    //将键值对 列名-列值 存入到当前的map中
                    mapEachRow.put(columnName, columnValue);

                }
                //将当前行的map存入到list对象中，list中的一个map对象表示查询结果集ResultSet中的一行
                lst.add(mapEachRow);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return lst;
    }


    /*/**
     * 方法描述 执行增insert、改update、删delete操作
     * @param strSql 需要执行的sql语句
     * @return int 影响行数
     *
     */

    public static int update(String strSql){
        //影响行数
        int i=0;
        try( //获取连接对象
             Connection conn=getConn();
             //获取sql发送指令装置Statement对象
             Statement st=conn.createStatement();)
        {
            //执行sql语句，返回结果为int型，即影响行数
            i= st.executeUpdate(strSql);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return i;
    }

    public static void adduser(users stu,String strSql) {
        PreparedStatement ps = null;

        try {
            Connection conn = getConn();

            ps = conn.prepareStatement(strSql);
            ps.setString(1, stu.getUid());
            ps.setString(2, stu.getPwd());
            ps.setString(3, stu.getAirname());
            ps.setString(4, stu.getPhone());
            ps.setString(5, stu.getAddress());
            int i = ps.executeUpdate();
            System.out.println("修改行数：" + i);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public static void addsupp(supplier stu,String strSql) {
        PreparedStatement ps = null;

        try {
            Connection conn = getConn();

            ps = conn.prepareStatement(strSql);
            ps.setString(1, stu.getSid());
            ps.setString(2, stu.getSpwd());
            ps.setString(3, stu.getSname());
            ps.setString(4, stu.getSphone());
            ps.setString(5, stu.getOptime());
            int i = ps.executeUpdate();
            System.out.println("修改行数：" + i);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}